package cn.heyige.backend.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import cn.heyige.backend.dto.ChatHistoryDto;
import cn.heyige.backend.entity.ChatHistoryDO;

import java.time.LocalDateTime;

/**
 * 聊天历史服务接口 - 精简版
 *
 * 专注于核心聊天历史管理功能，提高系统性能和可维护性
 *
 * @author CodeBuddy
 */
public interface ChatHistoryService extends IService<ChatHistoryDO> {

    /**
     * 保存聊天记录
     *
     * @param userId    用户ID
     * @param role      角色
     * @param content   内容
     * @param model     模型
     * @param tokens    token数量
     * @param sessionId 会话ID
     * @return 聊天记录
     */
    ChatHistoryDO saveChatHistory(Integer userId, String role, String content, String model, Integer tokens, String sessionId);

    /**
     * 保存用户消息
     *
     * @param userId    用户ID
     * @param content   内容
     * @param model     模型
     * @param sessionId 会话ID
     * @return 聊天记录
     */
    ChatHistoryDO saveUserMessage(Integer userId, String content, String model, String sessionId);

    /**
     * 保存助手消息
     *
     * @param userId    用户ID
     * @param content   内容
     * @param model     模型
     * @param tokens    token数量
     * @param sessionId 会话ID
     * @return 聊天记录
     */
    ChatHistoryDO saveAssistantMessage(Integer userId, String content, String model, Integer tokens, String sessionId);

    /**
     * 保存系统消息
     *
     * @param userId    用户ID
     * @param content   内容
     * @param sessionId 会话ID
     * @return 聊天记录
     */
    ChatHistoryDO saveSystemMessage(Integer userId, String content, String sessionId);

    /**
     * 获取用户的聊天历史列表
     *
     * @param userId   用户ID
     * @param pageNum  分页参数
     * @param pageSize 分页参数
     * @return 聊天历史列表
     */
    IPage<ChatHistoryDto.ChatHistoryResponse> getUserChatHistory(Integer userId, Integer pageNum, Integer pageSize);

    /**
     * 根据会话ID获取聊天历史列表
     *
     * @param userId    用户ID
     * @param sessionId 会话ID
     * @param pageNum   分页参数
     * @param pageSize  分页参数
     * @return 聊天历史列表
     */
    IPage<ChatHistoryDto.ChatHistoryResponse> getChatHistoryBySession(Integer userId, String sessionId, Integer pageNum, Integer pageSize);

    /**
     * 获取用户的会话列表
     *
     * @param userId   用户ID
     * @param pageNum  当前页
     * @param pageSize 页大小
     * @return 会话列表
     */
    IPage<ChatHistoryDto.SessionResponse> getUserSessions(Integer userId, Integer pageNum, Integer pageSize);

    /**
     * 删除聊天记录
     *
     * @param id     聊天记录ID
     * @param userId 用户ID
     */
    void deleteChatHistory(Integer id, Integer userId);

    /**
     * 删除会话的所有聊天记录
     *
     * @param userId    用户ID
     * @param sessionId 会话ID
     */
    void deleteChatHistoryBySession(Integer userId, String sessionId);

    /**
     * 删除用户的所有聊天记录
     *
     * @param userId 用户ID
     */
    void deleteAllChatHistory(Integer userId);

    /**
     * 清除指定时间之前的聊天记录
     *
     * @param userId     用户ID
     * @param beforeTime 时间
     */
    void clearChatHistoryBeforeTime(Integer userId, LocalDateTime beforeTime);

    /**
     * 获取聊天统计信息
     *
     * @param userId 用户ID
     * @return 聊天统计信息
     */
    ChatHistoryDto.StatisticsResponse getChatStatistics(Integer userId);
}